package ar.edu.utn.frgp.labtec.entities;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.ManyToMany;

@Entity()
@Table(name = "LABORATORIO")
public class Laboratorio implements Serializable {

	private static final long serialVersionUID = 1L;

	@Id
	@Column(name = "COD_LAB")
	private Integer codLab;
	
	@Id
	@ManyToOne
	@JoinColumn(name = "COD_DEPTO")
	private Departamento departamento; 

	@Column(name = "NOMBRE_LAB")
	private String nombreLab;

	@Column(name = "INICIALES")
	private String iniciales;
	
	@ManyToMany(mappedBy="laboratorios")
	private List<Usuario> usuarios;
	
	// H= habilitado, I=inhabilitado
	@Enumerated(EnumType.STRING)
	@Column(name = "ESTADO")
	private EstadoEnum estado;

	//############ EQUALS ############
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((codLab == null) ? 0 : codLab.hashCode());
		result = prime * result
				+ ((departamento == null) ? 0 : departamento.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Laboratorio other = (Laboratorio) obj;
		if (codLab == null) {
			if (other.codLab != null)
				return false;
		} else if (!codLab.equals(other.codLab))
			return false;
		if (departamento == null) {
			if (other.departamento != null)
				return false;
		} else if (!departamento.equals(other.departamento))
			return false;
		return true;
	}

	//############ CONSTRUCTOR ############
	public Laboratorio() {
	}

	//############ GETTERS Y SETTERS ############
	public Integer getCodLab() {
		return codLab;
	}


	public void setCodLab(Integer codLab) {
		this.codLab = codLab;
	}


	public String getNombreLab() {
		return nombreLab;
	}


	public void setNombreLab(String nombreLab) {
		this.nombreLab = nombreLab;
	}


	public String getIniciales() {
		return iniciales;
	}


	public void setIniciales(String iniciales) {
		this.iniciales = iniciales;
	}


	public EstadoEnum getEstado() {
		return estado;
	}


	public void setEstado(EstadoEnum estado) {
		this.estado = estado;
	}

	public List<Usuario> getUsuarios() {
		return usuarios;
	}

	public void setUsuarios(List<Usuario> usuarios) {
		this.usuarios = usuarios;
	}

	public void setDepartamento(Departamento departamento) {
		this.departamento = departamento;
	}

	public Departamento getDepartamento() {
		return departamento;
	}
	
	public String getIdLaboratorio(){
		String codeDpto = new String();
		String codLab = new String();
		
		if(departamento != null)
			codeDpto = departamento.getCodDepto();
		if(this.codLab != null)
			codLab = this.codLab.toString();
		
		return codLab + "-" + codeDpto;
	}

	@Override
	public String toString() {
		return codLab + " - " + nombreLab;
	}

	public Laboratorio(Integer codLab, Departamento departamento,
			String nombreLab, String iniciales, List<Usuario> usuarios,
			EstadoEnum estado) {
		super();
		this.codLab = codLab;
		this.departamento = departamento;
		this.nombreLab = nombreLab;
		this.iniciales = iniciales;
		this.usuarios = usuarios;
		this.estado = estado;
	}
}
